package com.cvic.se.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.cvic.se.entity.Person;
import com.cvic.se.service.PersonService;
import com.cvic.se.utils.Result;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

/**
 * <p>
 * InnoDB free: 4096 kB; (`MECH_ID`) REFER `work1/mechanism`(`MECH_ID`) 前端控制器
 * </p>
 *
 * @author liang,FY
 * @since 2021-07-21
 */
@RestController
@CrossOrigin // 跨域注解
@Api(value = "ApiObjMapController, api配置映射对象信息控制类")
@RequestMapping("/se/person")
public class PersonController {	

	@Autowired
	private PersonService personService;

	
	/**
	 *@category 查询所有联系人信息
	 *@return list 联系人信息集合
	 * */
	@GetMapping("getAllContactInfo")
	@ApiOperation(value = "查询所有联系人信息")
	public Result getAllContactInfo() {
		List<Person> list = personService.list(null);
		return Result.success().data("item", list);
	}

	/**
	 * @category 通过perId查询联系人详细信息
	 * @param perId 联系人的id值
	 * @return person 单个联系人的详细信息
	 * */
	@GetMapping("getContactInfoById/{perId}")
	@ApiOperation(value = "通过perId查询联系人详细信息")
	public Result getContactInfoById(@PathVariable String perId) {

		Person person = personService.getById(perId);
		return Result.success().data("person", person);
	}

	/**
	 * @category 逻辑删除单个联系人信息
	 * @param perId
	 * @return 判断执行删除操作是否成功
	 * */
	@DeleteMapping("deleteContactInfoById/{perId}")
	@ApiOperation(value = "逻辑删除单个联系人信息")
	public Result deleteContactInfoById(@PathVariable String perId) {

		boolean flag = personService.removeById(perId);
		if (flag) {
			return Result.success();
		} else {
			return Result.error();
		}
		
	}
	
	/**
	 * @category 批量删除联系人信息
	 * @param perIdList 批量删除的联系人的perId的集合
	 * @return 判断执行删除操作是否成功
	 * */
	@PostMapping("delBatchContacts")
	@ApiOperation(value = "批量删除用户信息")
	public Result deleteBatchContactsInfoById(@RequestBody List<String> perIdList) {

		boolean flag = personService.removeByIds(perIdList);
		if (flag) {
			return Result.success();
		} else {
			return Result.error();
		}

	}
	
	/**
	 * @category 分页查询功能
	 * @param current 页码
	 * @param limit 一个页面中展示的数据条数
	 * @return records 页面中要展示的联系人集合
	 * */
	@GetMapping("pageContactInfo/{current}/{limit}")
	@ApiOperation(value = "分页查询功能")
	public Result pageContactInfo(@PathVariable long current, @PathVariable long limit) {

		// 创建page对象
		Page<Person> pagePerson = new Page<>(current, limit);// current当前页，limit每页记录数据条数
		// 调用方法实现分页
		personService.page(pagePerson, null);
		long total = pagePerson.getTotal();// 总记录数
		List<Person> records = pagePerson.getRecords();// 数据list集合
		return Result.success().data("total", total).data("rows", records);
	}

	/**
	 * @category 添加联系人信息
	 * @param person 
	 * @return 判断执行添加操作是否成功
	 * */
	@PostMapping("addContactInfo")
	@ApiOperation(value = "添加联系人信息")
	public Result addContactInfo(@RequestBody Person person) {
		return personService.addContactInfo(person);
	}

	/**
	 * @category 修改联系人信息
	 * @param person 联系人信息
	 * @return 判断执行修改操作是否成功
	 * */
	@PostMapping("updateContactInfo")
	@ApiOperation(value = "修改联系人信息")
	public Result updateContactInfo(@RequestBody Person person) {
		boolean flag = personService.updateById(person);
		return flag ? Result.success() : Result.error();
	}

	/**
	 * @category 查询某机构所有联系人信息
	 * @param person 联系人信息
	 * @return 判断执行修改操作是否成功
	 * */
	@GetMapping("/getPerByInstId")
	@ApiOperation(value = "查询机构联系人")
	public Result getPerByInstId(String id) {
		QueryWrapper<Person> wrapper = new QueryWrapper<>();
		wrapper.eq("INST_ID", id);		
		List<Person> list = personService.list(wrapper);		
		if(!list.isEmpty()) {
			return Result.success().data("content", list);
		}
		return Result.error();
	}
}
